/**
 * @param {string} text1
 * @param {string} text2
 * @return {number}
 */
 var longestCommonSubsequence = function(text1, text2) {
  // 首先将这两个字符串分割成数组
  let str1 = text1.split('')
  let str2 = text2.split('')
  let str1Len = str1.length
  let str2Len = str2.length
  console.log(str1Len,str2Len);
  // 设dp[i][j] 表示以i-1,j-1为结尾的最长公共子序列的长度
  let dp = new Array(str1Len+1).fill(0).map(()=>new Array(str2Len+1).fill(0))
  // 初始化都是0
  // let result = 0
  for(let i = 1;i <= str1Len;i++){
    // 从第一个遍历到最后一个
    for(let j = 1;j <= str2Len;j++){
      // 从第二个遍历到最后一个
      if(str1[i-1] === str2[j-1]){ // 如果这个前一个和这个的后一个的字符时相等的 name以i-1,j-1位结尾的字符串的最长子序列的长度 就是以 i-2,j-2位结尾的最长子序列的长度+1
        dp[i][j] = dp[i-1][j-1] + 1
      }else {
        // 如果这两个不相同的话 那就是以这两个的较大的那一个
        dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]) // 以i-2,j-2为结尾的最大长度 和以i-2,j-1为结尾的最大长度 和以 i-1,j-2位结尾的最大长度 后面两种包含了第一种 因为是双层遍历所以 会产生这种值 
      }
      // if(dp[i][j] > result) result = dp[i][j]
    }
  }
  return dp[str1Len,str2Len]
};
console.log(longestCommonSubsequence("abcde","ace"));